package van.planifolia.demo05;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

/**
 * Created by Intellij IDEA<br>
 * 工具类获取dao接口对应的实现类
 * @author Planifolia.Van
 * @version 1.0
 * @date 2022/9/23 16:13
 */
public class MyBatisUtil<T> {
    public SqlSession sqlSession=null;
    static SqlSessionFactory sessionFactory =null;

    /*
      获取sqlSession,加载mybatis.xml核心文件,因为这一块只要执行一次所以我直接把他写在静态代码块中
     */
    static {
        try {
            Reader reader = Resources.getResourceAsReader("mybatis.xml");
            sessionFactory=new SqlSessionFactoryBuilder().build(reader);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 此方法用于打开一个SqlSession,每一个涉及到 增 删 改的 SqlSession都对应一个事务,像这种事务都需要去调用下面的事务提交
     * @param aClass dao接口的class对象
     * @return 返回的接口实现类对象
     */
    public T getDao(Class<T> aClass){
        sqlSession=sessionFactory.openSession();
        return sqlSession.getMapper(aClass);
    }

    /**
     * sqlSession的提交与关闭
     */
    public  void sqlSessionCommit(){
        sqlSession.commit();
        sqlSession.close();
    }
}
